﻿package com.zouloux.graphics.menu.controllers 
{
	import com.zouloux.core.data.IDataCollection;
	import com.zouloux.core.events.DataEvent;
	import com.zouloux.core.masters.IController;
	import com.zouloux.core.masters.IModel;
	import com.zouloux.core.masters.IView;
	import com.zouloux.core.masters.MasterController;
	import com.zouloux.graphics.menu.views.MenuBuilderView;
	import com.zouloux.graphics.menu.views.MenuItemButton;
	
	/**
	 * ...
	 * @author ZoulouX
	 */
	public class MenuBuilderController extends MasterController
	{
		/**
		 * L'instance du model
		 */
		protected var _model			:IModel;
		
		/**
		 * La vue associée
		 * @param	pModel
		 */
		protected var _view				:MenuBuilderView;
		
		/**
		 * Pouvoir passer l'instance de la vue
		 */
		public function get view():MenuBuilderView { return _view; }
		public function set view(value:MenuBuilderView):void 
		{
			_view = value;
		}
		
		/**
		 * Le contrstructeur
		 * @param	pModel : le model du menu, généralement fourni par le bootstrap
		 */
		public function MenuBuilderController (pModel:IModel)
		{
			// Enregistrer le model
			_model = pModel;
			
			// Ecouter
			_model.collection.addEventListener(DataEvent.UPDATE, updateHandler);
			_model.addEventListener(DataEvent.VALIDATE, validateHandler);
			_model.addEventListener(DataEvent.UNVALIDATE, unvalidateHandler);
		}
		
		/**
		 * Ce menu n'est plus valide
		 * @param	event
		 */
		protected function unvalidateHandler (event:DataEvent):void 
		{
			_view.unvalidate();
		}
		
		/**
		 * Ce menu est validé
		 * @param	event
		 */
		protected function validateHandler (event:DataEvent):void 
		{
			_view.validate();
		}
		
		/**
		 * Le bouton séléctionné change
		 * @param	event
		 */
		protected function updateHandler (event:DataEvent = null):void 
		{
			// Parcourir les boutons
			for each (var button:MenuItemButton in _view.buttons)
			{
				// Vérifier si l'item est le même que celui du model
				if (button.menuItem == _model.collection.current)
				{
					// Séléctionner
					_view.selectButton(button);
					break;
				}
			}
		}
		
		/**
		 * Récupérer la collection
		 */
		public function getCollection ():IDataCollection
		{
			return _model.collection;
		}
	}
}